group { name: "elm/pointer/base/default";
   images {
      image: "pointer.png" COMP;
   }
   parts {
      part { name: "base";
         mouse_events: 0;
         scale: 1;
         description { state: "default" 0.0;
            aspect: 1.0 1.0;
            min: 32 32;
            /* force a specific aspect ratio so
             * when it gets scaled it wont squash
             * or stretch */
            aspect_preference: BOTH;
            /* both axes control aspect - thus it
             * will be WITHIN the bounds the axes
             * of thre part describe */
            image.normal: "pointer.png";
            color_class: "/fg/normal/pointer/base";
         }
      }
      part { name: "elm.swallow.hotspot"; type: SWALLOW;
         /* this is a "fake" swallow part
          * that is used by e to determine
          * the pointer hotspot - or where
          * the actual mouse events get
          * reported from on the cursor */
         description { state: "default" 0.0;
            visible: 0;
            fixed: 1 1;
            rel1 { to: "base";
               /* the hotspot will scale with the cursor here */
               relative: 0.1875 0.1875;
               offset: 0 0;
            }
            rel2 { to: "base";
               relative: 0.1875 0.1875;
               offset: 0 0;
            }
         }
      }
   }
}

group { name: "elm/pointer/base/bottom_right_corner";
   inherit: "elm/pointer/base/default";
   parts {
      part { name: "box"; type: RECT;
         insert_after: "base";
         description { state: "default" 0.0;
            color_class: "/fg/normal/pointer/manipulator";
            rel1.relative: 0.3 0.3;
            rel2.relative: 0.7 0.7;
         }
         description { state: "p1" 0.0;
            inherit: "default" 0.0;
            rel1.relative: 0.3 0.3;
            rel2.relative: 1.0 1.0;
         }
      }
   }
   programs {
      program { name: "box1";
         signal: "load"; source: "";
         action: STATE_SET "p1" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "box";
         after: "box2";
      }
      program { name: "box2";
         action: STATE_SET "default" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "box";
         after: "box1";
      }
   }
}

group { name: "elm/pointer/base/top_right_corner";
   inherit: "elm/pointer/base/bottom_right_corner";
   parts {
      part { name: "box";
         description { state: "default" 0.0;
            rel1.relative: 0.3 0.3;
            rel2.relative: 0.7 0.7;
         }
         description { state: "p1" 0.0;
            rel1.relative: 0.3 0.0;
            rel2.relative: 1.0 0.7;
         }
      }
   }
}

group { name: "elm/pointer/base/top_left_corner";
   inherit: "elm/pointer/base/bottom_right_corner";
   parts {
      part { name: "box";
         description { state: "default" 0.0;
            rel1.relative: 0.6 0.6;
            rel2.relative: 1.0 1.0;
         }
         description { state: "p1" 0.0;
            rel1.relative: 0.3 0.3;
            rel2.relative: 1.0 1.0;
         }
      }
   }
}

group { name: "elm/pointer/base/bottom_left_corner";
   inherit: "elm/pointer/base/bottom_right_corner";
   parts {
      part { name: "box";
         description { state: "default" 0.0;
            rel1.relative: 0.7 0.3;
            rel2.relative: 1.0 0.7;
         }
         description { state: "p1" 0.0;
            rel1.relative: 0.3 0.3;
            rel2.relative: 1.0 1.0;
         }
      }
   }
}

group { name: "elm/pointer/base/bottom_side";
   inherit: "elm/pointer/base/bottom_right_corner";
   parts {
      part { name: "box";
         description { state: "default" 0.0;
            rel1.relative: 0.3 0.3;
            rel2.relative: 1.0 0.7;
         }
         description { state: "p1" 0.0;
            rel1.relative: 0.3 0.3;
            rel2.relative: 1.0 1.0;
         }
      }
   }
}

group { name: "elm/pointer/base/top_side";
   inherit: "elm/pointer/base/bottom_right_corner";
   parts {
      part { name: "box";
         description { state: "default" 0.0;
            rel1.relative: 0.3 0.6;
            rel2.relative: 1.0 1.0;
         }
         description { state: "p1" 0.0;
            rel1.relative: 0.3 0.3;
            rel2.relative: 1.0 1.0;
         }
      }
   }
}

group { name: "elm/pointer/base/left_side";
   inherit: "elm/pointer/base/bottom_right_corner";
   parts {
      part { name: "box";
         description { state: "default" 0.0;
            rel1.relative: 0.6 0.3;
            rel2.relative: 1.0 1.0;
         }
         description { state: "p1" 0.0;
            rel1.relative: 0.3 0.3;
            rel2.relative: 1.0 1.0;
         }
      }
   }
}

group { name: "elm/pointer/base/right_side";
   inherit: "elm/pointer/base/bottom_right_corner";
   parts {
      part { name: "box";
         description { state: "default" 0.0;
            rel1.relative: 0.3 0.3;
            rel2.relative: 0.7 1.0;
         }
         description { state: "p1" 0.0;
            rel1.relative: 0.3 0.3;
            rel2.relative: 1.0 1.0;
         }
      }
   }
}

group { name: "elm/pointer/base/hand1";
   inherit: "elm/pointer/base/default";
   parts {
      part { name: "box"; type: RECT;
         insert_after: "base";
         description { state: "default" 0.0;
            color_class: "/fg/normal/pointer/manipulator";
            rel1.relative: 0.5 0.5;
            rel2.relative: 1.0 1.0;
         }
         description { state: "p1" 0.0;
            inherit: "default" 0.0;
            rel1.relative: 0.5 0.2;
            rel2.relative: 1.0 0.7;
         }
         description { state: "p2" 0.0;
            inherit: "default" 0.0;
            rel1.relative: 0.0 0.5;
            rel2.relative: 0.5 1.0;
         }
         description { state: "p3" 0.0;
            inherit: "default" 0.0;
            rel1.relative: 0.2 0.2;
            rel2.relative: 0.7 0.7;
         }
         description { state: "p4" 0.0;
            inherit: "default" 0.0;
            rel1.relative: 0.3 0.5;
            rel2.relative: 0.8 1.0;
         }
      }
   }
   programs {
      program { name: "box1";
         signal: "load"; source: "";
         action: STATE_SET "p1" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "box";
         after: "box2";
      }
      program { name: "box2";
         action: STATE_SET "p2" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "box";
         after: "box3";
      }
      program { name: "box3";
         action: STATE_SET "p3" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "box";
         after: "box4";
      }
      program { name: "box4";
         action: STATE_SET "p4" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "box";
         after: "box5";
      }
      program { name: "box5";
         action: STATE_SET "default" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "box";
         after: "box1";
      }
   }
}

group { name: "elm/pointer/base/move";
   inherit: "elm/pointer/base/hand1";
   programs {
   }
}

group { name: "elm/pointer/base/rotate";
   inherit: "elm/pointer/base/default";
   parts {
      part { name: "box"; type: RECT;
         insert_after: "base";
         description { state: "default" 0.0;
            color_class: "/fg/normal/pointer/manipulator";
            rel1.relative: 0.3 0.3;
            rel2.relative: 0.8 0.8;
            map.on: 1;
            map.smooth: 1;
            map.rotation.center: "box";
         }
         description { state: "p1" 0.0;
            inherit: "default" 0.0;
            map.rotation.z: 30;
         }
         description { state: "p2" 0.0;
            inherit: "default" 0.0;
            map.rotation.z: -60;
         }
      }
   }
   programs {
      program { name: "box1";
         signal: "load"; source: "";
         action: STATE_SET "p1" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "box";
         after: "box2";
      }
      program { name: "box2";
         action: STATE_SET "p2" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "box";
         after: "box3";
      }
      program { name: "box3";
         action: STATE_SET "p1" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "box";
         after: "box2";
      }
   }
}

group { name: "elm/pointer/base/plus";
   inherit: "elm/pointer/base/default";
   images.image: "pointer_plus.png" COMP;
   parts {
      part { name: "add";
         insert_after: "base";
         scale: 1;
         description { state: "default" 0.0;
            image.normal: "pointer_plus.png";
            color_class: "/fg/normal/pointer/manipulator";
            aspect: 1.0 1.0; aspect_preference: BOTH;
            rel1.relative: 0.3 0.3;
            rel2.relative: 1.0 1.0;
            align: 1.0 1.0;
            max: 21 21;
         }
         description { state: "faded" 0.0;
            inherit: "default" 0.0;
            color: 255 255 255 128; // no cc
         }
      }
   }
   programs {
      program { name: "fade1";
         signal: "load"; source: "";
         action: STATE_SET "faded" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "add";
         after: "fade2";
      }
      program { name: "fade2";
         action: STATE_SET "default" 0.0;
         transition: SINUSOIDAL 0.5;
         target: "add";
         after: "fade1";
      }
   }
}

group { name: "elm/pointer/base/xterm";
   images.image: "pointer_entry.png" COMP;
   parts {
      part { name: "base";
         scale: 1;
         description { state: "default" 0.0;
            color_class: "/fg/normal/pointer/base";
            image.normal: "pointer_entry.png";
            aspect: (44/88) (44/88); aspect_preference: VERTICAL;
            FIXED_SIZE(32, 32)
         }
      }
      part { name: "elm.swallow.hotspot"; type: SWALLOW;
         description { state: "default" 0.0;
            fixed: 1 1;
            visible: 0;
            rel.to: "base";
            rel1.relative: 0.5 0.5;
            rel2.relative: 0.5 0.5;
            rel2.offset: 0 0;
        }
      }
   }
}
